package com.mbengue.corp.apr.ra.dao.impl;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.mbengue.corp.apr.ra.core.AdresseMembre;
import com.mbengue.corp.apr.ra.core.Membre;
import com.mbengue.corp.apr.ra.dao.AdresseMembreDao;
import com.mbengue.corp.apr.ra.util.HibernateUtil;

public class AdresseMembreDaoImpl implements AdresseMembreDao {
  private static final long serialVersionUID = 1L;
  private Session session;

  public AdresseMembreDaoImpl() {
    session = HibernateUtil.getSessionFactory();
  }

  @Override
  public void ajouter(AdresseMembre objet) throws HibernateException {
    Transaction transaction = session.beginTransaction();
    try {
      session.save(objet);
      transaction.commit();
    } catch (Exception e) {
      transaction.rollback();
      throw new HibernateException(e);
    } finally {
      session.flush();
      //session.close();
    }
  }

  @Override
  public AdresseMembre modifier(AdresseMembre aObjet) throws HibernateException {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public void supprimer(AdresseMembre objet) throws HibernateException {
    Transaction tra = session.beginTransaction();
    session.delete(objet);
    tra.commit();
  }

  @Override
  public AdresseMembre trouver(Long key) throws HibernateException {
    Criteria criteria = session.createCriteria(AdresseMembre.class);
    criteria.add(Restrictions.eq("id", key));
    return (AdresseMembre) criteria.uniqueResult();
  }

  @Override
  public AdresseMembre trouverAdresseMembre(Membre membre) {
    Query query = session.getNamedQuery("findByMember");
    query.setParameter("membre", membre);
    return (AdresseMembre) query.uniqueResult();
  }

  @Override
  public int supprimerAdresseMembre(Membre aMembre) {
    Query query = session.getNamedQuery("deleteByMember");
    query.setParameter("membre", aMembre);
    return query.executeUpdate();
  }
}
